package com.extension.company.dao.daoUtil;

import android.content.Context;

import com.extension.company.dao.SearchHistoryDbDao;
import com.extension.company.greenDaoDb.SearchHistoryDb;

import java.util.List;

/**
 * 作者：zwk
 * 时间：on 2019/2/25 20:58
 * 功能：完成对一张表的具体的操作，orm操作的是对象
 * 使用:在Activity 中使用
 * DBOperationUntil commonUntils=new ComonUntils(this);
 * Object object=new Object();
 * commonUntils.xx方法();
 */
public class DBOperationUntil {
	private DaoManger manger;

	public DBOperationUntil(Context context) {
		manger = DaoManger.getInstance();
		manger.init(context);
	}
	/*
	 * 数据库的插入的操作 表的插入
	 * */

	public <T> boolean insert(T object) {
		boolean flag = false;
		flag = manger.getDaoSession().insert(object) != -1 ? true : false; // -1是数据库插入失败
		return flag;
	}

	/**
	 * 多条记录的批量插入，需要使用异步进行插入
	 *
	 * @param objectList 插入的数据对象
	 * @return 是否插入成功
	 */
	public <T> boolean insertMultObjeList(final List<T> objectList) {
		boolean flag = false;
		try {
			manger.getDaoSession().runInTx(new Runnable() {
				@Override
				public void run() {
					for (T t : objectList) {
						manger.getDaoSession().insertOrReplace(t);
					}
				}
			});
			flag = true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return flag;
	}

	/**
	 * 修改一条数据
	 *
	 * @param object 要修改的对象
	 * @return 修改数据是否成功
	 */
	public <T> boolean updateObject(T object) {
		boolean flag = false;
		try {
			manger.getDaoSession().update(object);
			flag = true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return flag;

	}


	/**
	 * 删除单条记录
	 *
	 * @param object
	 * @return
	 */
	public <T> boolean deleteObject(T object) {
		boolean flag = false;
		try {
			manger.getDaoSession().delete(object); //
			//manger.getDaoSession().deleteAll();  // 删除所有的记录
			flag = true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return flag;
	}

	public  boolean deleteAll() {
		boolean flag = false;
		try {
             manger.getDaoSession().getSearchHistoryDbDao().deleteAll();
			flag = true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return flag;
	}

	/**
	 * 返回表中所有的数据
	 *
	 * @return
	 */
	public List<SearchHistoryDb> listAll() {
		return manger.getDaoSession().loadAll(SearchHistoryDb.class);
	}

	/**
	 * 按照主键返回单行记录
	 *
	 * @param cls
	 * @param key
	 * @return
	 */
	public Object listOneObject(Class cls, long key) {
		return manger.getDaoSession().load(cls, key);

	}

	/**
	 * 查询所有的数据的条数
	 *
	 * @return
	 */
	public long queryCount() {
		return manger.getDaoSession().queryBuilder(SearchHistoryDb.class).count();
	}

	/**
	 * 查找相同内容的数据的个数
	 *
	 * @param content
	 * @return
	 */
	public long qureyContentCount(String content) {

		long contentNum = manger.getDaoSession().getSearchHistoryDbDao().queryBuilder().where(SearchHistoryDbDao.Properties.Name.eq(content)).count();
		return contentNum;
	}

//	/**
//	 * 这个功能没有用处只是展示用法
//	 */
//	public void query() {
//		// 使用原生sqlite的写法
//		List<Object> list = manger.getDaoSession().queryRaw(Object.class, "where name like ? and _id>?", new String[]{"%李%", "1001"});
//	}


//	public void query2() {
//		QueryBuilder<Object> queryBuilder = manger.getDaoSession().queryBuilder(Object.class);
//		// 逻辑与
//		queryBuilder.where(Object.Properties.).where() .list();
//	}
}
